/*-------------------------------------------------------------------------
 *
 * ecpg_keywords.c
 *	  词法标记查找，用于Postgres嵌入式SQL中的保留字
 *
 * IDENTIFICATION
 *	  src/interfaces/ecpg/preproc/ecpg_keywords.c
 *
 *-------------------------------------------------------------------------
 */

#include "postgres_fe.h"

#include <ctype.h>

/* ScanKeywordList查找ECPG关键字的数据 */
#include "ecpg_kwlist_d.h"
#include "preproc_extern.h"
#include "preproc.h"

/* ECPG关键字的标记代码 */
#define PG_KEYWORD(kwname, value) value,

static const uint16 ECPGScanKeywordTokens[] = {
#include "ecpg_kwlist.h"
};

#undef PG_KEYWORD


/*
 * ScanECPGKeywordLookup - 检查给定的单词是否为关键字
 *
 * 返回关键字的标记值，如果没有匹配则返回-1。
 *
 * 关键字的匹配使用与后端相同的大小写折叠规则。
 */
int ScanECPGKeywordLookup(const char *fc_text)
{
	int			fc_kwnum;

	/* 首先检查后端定义的SQL符号。 */
	fc_kwnum = ScanKeywordLookup(fc_text, &ScanKeywords);
	if (fc_kwnum >= 0)
		return SQLScanKeywordTokens[fc_kwnum];

	/* 尝试ECPG特定的关键字。 */
	fc_kwnum = ScanKeywordLookup(fc_text, &ScanECPGKeywords);
	if (fc_kwnum >= 0)
		return ECPGScanKeywordTokens[fc_kwnum];

	return -1;
}
